用groovy实现根据规则校验单据数据
条评论单据字段校验,在任何管理信息系统中都是普通得不能再普通的问题。通常我们的都会选择在前端以及后端各实现一遍。
前端实现,方便用户体验;后端实现,确保数据健康。
但是总觉得同样的业务实现两遍,真的不符合直觉。我的想法是,把校验规则抽象出来,通过公共方法来处理单据校验问题。做到一套规则,两处判断。减少业务开发人员的重复劳动。
比如规则是这样的
[ |
这里面target
是为了跟前端交互,在规则验证失败时给前端UI标红框使用的;tip
是出错信息提示。只有expression
才是核心业务——能返回boolean
的表达式。
怎么才能驱动表达式执行呢,这在有动态特性的groovy
中简直是小菜一碟。最简单的:
assert true == Eval.me("2>1") |
轻松通过,但是注意我上面的v_password == v_password_twice
这就比较棘手了,要从一个上下文中获取字段数据,再执行表达式,
这里假设我们准备的数据是:
def map = [ |
想让groovy
动态脚本认识map
,需要借助更强大的GroovyShell
,代码如下:
def sharedData = new Binding() |
看起来Binding
可以轻易地构造执行脚本的上下文环境,那能不能更进一步,传入一个方法呢,比如上文的notBlank
,也很简单
def notBlank = { String s -> |
有了强大的groovy
,就可以实现基于表达式的动态数据验证,没有占位符,没有字符串替换,还支持注入方法,真是即简单又强大。
这是我最终实现的方法:
/** |
完整测试代码参考:https://gist.github.com/aruis/d4a28b3cedfcc2a23a85ac67ca68adb7
本文标题:用groovy实现根据规则校验单据数据
文章作者:牧云踏歌
发布时间:2019-02-20
最后更新:2019-02-20
原始链接:http://www.kankanzhijian.com/2019/02/20/groovy_validating_form_on%20dynamic_rules/
版权声明:本博客文章均系本人原创,转载请注名出处